package co.edu.uniandes.services;

import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import co.edu.uniandes.dto.ItinerarioEvento;
import co.edu.uniandes.services.constantes.ConsultaConstantes;

public class ServicioItinerarioEvento implements IServicioItinerarioEvento {

	@Override
	public void insertar(ItinerarioEvento objeto) throws Exception,RemoteException {
		PreparedStatement ps=null;
		try{
			if (objeto == null || objeto.getIdEvento() == 0
					|| objeto.getIdItinerario() == 0) {
				throw new Exception(
						"No se puede guardar el evento ya que tiene datos sin diligenciar");
			}
			Connection con= ConexionBD.getInstance().getConection();
			ps=con.prepareStatement(ConsultaConstantes.INSERT_ITINERARIO_EVENTO);
			ps.setInt(1, objeto.getIdEvento());
			ps.setInt(2, objeto.getIdItinerario());
			ps.execute();
		}catch (Exception e) {
			throw e;
		}finally{
			if(ps!=null && !ps.isClosed()){
				ps.close();
			}
		}
		
	}

	@Override
	public List<ItinerarioEvento> consultar() throws Exception, RemoteException {
		PreparedStatement ps=null;
		ResultSet rs=null;
		List<ItinerarioEvento> resultados=new ArrayList<ItinerarioEvento>();
		try{
			
			Connection con= ConexionBD.getInstance().getConection();
			ps=con.prepareStatement(ConsultaConstantes.CONSULTA_ITINERARIO_EVENTO);
			rs=ps.executeQuery();
			ItinerarioEvento itinerarioEvento;
			while(rs.next()){
				itinerarioEvento=new ItinerarioEvento();
				itinerarioEvento.setId(rs.getInt("id"));
				itinerarioEvento.setIdEvento(rs.getInt("idEvento"));
				itinerarioEvento.setIdItinerario(rs.getInt("idItinerario"));
				resultados.add(itinerarioEvento);
			}
		}catch (Exception e) {
			throw e;
		}finally{
			if(rs!=null && !rs.isClosed()){
				rs.close();
			}
			if(ps!=null && !ps.isClosed()){
				ps.close();
			}
		}
		return resultados;
	}

	@Override
	public void eliminar(Integer id) throws Exception, RemoteException {
		PreparedStatement ps=null;
		try{
			if(id==null){
				throw new Exception(" La identificacion del evento que se va a eliminar es nula");
			}
			Connection con= ConexionBD.getInstance().getConection();
			ps=con.prepareStatement(ConsultaConstantes.DELETE_ITINERARIO_EVENTO);
			ps.setInt(1,id);
			ps.execute();
		}catch (Exception e) {
			throw e;
		}finally{
			if(ps!=null && !ps.isClosed()){
				ps.close();
			}
		}
	}




}
